<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script type="text/javascript">
    /*定义一个Person类*/
    function Person(_name,_age,_salary){
        //Person类的公开属性，类的公开属性的定义方式是：”this.属性名“
        this.Name=_name;
        //Person类的私有属性，类的私有属性的定义方式是：”var 属性名“
        var Age=_age;
        var Salary=_salary;

        //定义Person类的公开方法(特权方法)，类的公开方法的定义方式是：”this.functionName=function(){.....}“
        this.Show=function(){
            alert("Age="+Age+"\t"+"Salary="+Salary);//在公开方法里面访问类的私有属性是允许的
        }
        /*
        定义Person类的私有方法(内部方法)，
        类的私有方法的定义方式是：”function functionName(){.....}“，
        或者 var functionName=function(){....}
        */
        function privateFn(){
            alert("我是Person类的私有函数privateFn");
        }

        var privateFn2=function(){
            alert("我是Person类的私有函数privateFn2");
        }
    }
    /*通过prototype可以给类的所有对象添加公共(public)方法，
    但是这种方式定义的方法不能去访问类的私有属性和私有方法*/
    Person.prototype.Fn=function(){
        alert("访问公共属性this.Name="+this.Name);//访问公共属性，OK的
        //alert("访问私有属性Aag="+Age);//访问私有属性，这里会报错“Age未定义”
        //privateFn();//调用私有方法，这里会报错“缺少对象”

    }

    var p1 = new Person("孤傲苍狼",24,2300);
    alert("p1.Name="+p1.Name);//访问公有属性，这是可以正常访问的
    alert("p1.Age="+p1.Age+"\t"+"p1.Salary="+p1.Salary);//不能使用类的对象去直接访问类私有属性，这是访问不了的，结果都是undefined
    p1.Show();//调用类的公共函数，这次允许的
    p1.Fn();//调用类的公共函数，这次允许的
    //alert("p1.privateFn()："+p1.privateFn()+" p1.privateFn2()："+p1.privateFn2());//不能使用类的对象去调用类的私有方法，这里会报错”对象不支持此属性或者方法“
</script>
</body>
</html>